package uade.distribuidas.server.dao;


import java.util.List;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;

import uade.distribuidas.repo.exception.ExceptionProveedor;
import uade.distribuidas.repo.type.EstadoType;
import uade.distribuidas.server.domain.Proveedor;
import uade.distribuidas.server.hibernate.HibernateUtil;

public class ProveedoresDAO {

	private static ProveedoresDAO instancia = null;
	private static SessionFactory sf = null;

	public static ProveedoresDAO getInstancia(){
		if(instancia == null){
			sf = HibernateUtil.getSessionFactory();
			instancia = new ProveedoresDAO();
		} 
		return instancia;
	}
	
	@SuppressWarnings("unchecked")
	public List<Proveedor> getProveedores()throws ExceptionProveedor{
		Session session = sf.openSession();
		
		List<Proveedor> lista = session.createQuery("from Proveedor where estado =:estado").setParameter("estado", EstadoType.ACTIVO).list();		
	
		
		session.close();
		return lista;
	}
	
	
	public Proveedor getProveedor(Integer id)throws ExceptionProveedor{
		Session session = sf.openSession();
		
		Proveedor p = (Proveedor) session.createQuery("from Proveedor where id = :id")
				.setParameter("id", id)
				.uniqueResult();			
		
		session.close();
		return p;
	}

	public Proveedor save(Proveedor p) throws ExceptionProveedor{
		Session session = sf.openSession();
		 Transaction transaction = session.beginTransaction();
		 transaction.begin();
		 session.saveOrUpdate(p);
		 transaction.commit();
		 session.close();
		 return p;
	}
	
	public Proveedor getProveedor(String cuil, String razonSocial) throws ExceptionProveedor{
		Session session = sf.openSession();
		
		Proveedor p = (Proveedor) session.createQuery("from Proveedor where cuil = :cuil and razonsocial = :razonsocial")
				.setParameter("cuil", cuil)
				.setParameter("razonsocial", razonSocial)
				.uniqueResult();			
		
		session.close();
		return p;
	}

	public Proveedor getProveedorPorCuil(String cuil) {
		Session session = sf.openSession();
		
		Proveedor p = (Proveedor) session.createQuery("from Proveedor where cuil = :cuil")
				.setParameter("cuil", cuil)
				.uniqueResult();			
		
		session.close();
		return p;
	}

}
